package com.example.controller;


import com.example.model.*;
import com.example.service.BookService;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * 图书控制层
 * 职责：接收前端请求，调用业务逻辑层，返回响应数据
 */

@Slf4j
@RequestMapping("/book")  // 映射基础路径
@RestController           // 标识为RESTful控制器
public class BookController {
    @Autowired
    private BookService bookService;

    /**
     * 获取图书列表接口
     * @return 图书列表数据
     */
    @RequestMapping("/getList")
    public List<BookInfo> getList() {
//        // 创建业务逻辑层对象
//        BookService bookService = new BookService();

        // 调用业务逻辑层获取数据
        List<BookInfo> books = bookService.getBookList();

        // 返回数据给前端
        return books;
    }


    /**
     * 添加图书接口
     * @param bookInfo 图书信息（Spring自动绑定表单参数）
     * @return 操作结果
     */
    @RequestMapping("/addBook")
    public String addBook(BookInfo bookInfo) {
        log.info("添加图书:{}", bookInfo);

        // 参数校验
        if (!StringUtils.hasLength(bookInfo.getBookName())
                || !StringUtils.hasLength(bookInfo.getAuthor())
                || bookInfo.getCount() == null
                || bookInfo.getPrice() == null
                || !StringUtils.hasLength(bookInfo.getPublish())
                || bookInfo.getStatus() == null) {
            return "输入参数不合法, 请检查入参!";
        }

        try {
            bookService.addBook(bookInfo);  // 调用业务层添加图书
            return "";  // 成功返回空字符串
        } catch (Exception e) {
            log.error("添加图书失败", e);
            return e.getMessage();  // 失败返回错误信息
        }
    }

    /**
     * 分页获取图书列表
     * @param pageRequest 分页请求参数
     * @return 分页结果
     */
    /**
     * 分页获取图书列表（添加登录检查）
     */
    @RequestMapping("/getListByPage")
    public Result getListByPage(PageRequest pageRequest, HttpSession session) {
        log.info("获取图书列表, pageRequest:{}", pageRequest);

        // 判断用户是否登录
        if (session.getAttribute("session_user_key") == null) {
            return Result.unlogin();  // 返回未登录状态
        }

        UserInfo userInfo = (UserInfo) session.getAttribute("session_user_key");
        if (userInfo == null || userInfo.getId() < 0 || "".equals(userInfo.getUserName())) {
            return Result.unlogin();  // 用户信息不完整，视为未登录
        }

        // 用户已登录，返回图书列表
        PageResult<BookInfo> pageResult = bookService.getBookListByPage(pageRequest);
        return Result.success(pageResult);  // 返回成功响应
    }

    /**
     * 根据ID查询图书信息
     * @param bookId 图书ID
     * @return 图书信息
     */
    @RequestMapping("/queryBookById")
    public BookInfo queryBookById(Integer bookId) {
        log.info("查询图书信息, bookId:{}", bookId);
        if (bookId == null || bookId <= 0) {
            log.warn("图书ID参数不合法: {}", bookId);
            return null;  // 返回null而不是空对象
        }
        try {
            BookInfo bookInfo = bookService.queryBookById(bookId);
            return bookInfo;
        } catch (Exception e) {
            log.error("查询图书信息异常", e);
            return null;
        }
    }


    /**
     * 修改图书信息
     * @param bookInfo 图书信息
     * @return 操作结果
     */
    @RequestMapping("/updateBook")
    public String updateBook(BookInfo bookInfo) {
        log.info("修改图书:{}", bookInfo);
        try {
            bookService.updateBook(bookInfo);
            return "";  // 成功返回空字符串
        } catch (Exception e) {
            log.error("修改图书失败", e);
            return e.getMessage();  // 失败返回错误信息
        }
    }

    /**
     * 删除图书（逻辑删除）
     * @param bookId 图书ID（与前端保持一致）
     * @return 操作结果
     */
    @RequestMapping("/deleteBook")
    public boolean deleteBook(@RequestParam("bookId") Integer bookId) {  // 添加@RequestParam注解
        log.info("删除图书, bookId:{}", bookId);
        try {
            BookInfo bookInfo = new BookInfo();
            bookInfo.setId(bookId);
            bookInfo.setStatus(0);
            bookService.updateBook(bookInfo);
            return true;
        } catch (Exception e) {
            log.error("删除图书异常", e);
            return false;
        }
    }




    /**
     * 批量删除图书
     * @param ids 图书ID列表
     * @return 操作结果
     */
    @RequestMapping("/batchDeleteBook")
    public boolean batchDeleteBook(@RequestParam List<Integer> ids) {
        log.info("批量删除图书, ids:{}", ids);
        try {
            bookService.batchDeleteBook(ids);
            return true;  // 删除成功
        } catch (Exception e) {
            log.error("批量删除异常", e);
            return false;  // 删除失败
        }
    }
}